package web

import (
	"ksd-social-api/commons/base/controller"
	"ksd-social-api/modules/note/model/context"
	"ksd-social-api/modules/note/service"
	"ksd-social-api/utils"
	"strconv"
)

type NoteLessonController struct {
	controller.BaseController
}

var noteLessonService = service.NoteLessonService{}

// 复制章
func (web *NoteLessonController) CopyData() {
	// 1: 获取小册id
	lessonId, _ := web.ParseParamUint64("id")
	noteId, _ := web.ParseParamUint64("noteId")
	// 2: 系统ID
	systemId := web.GetSystemId()
	if !web.CheckPersmission(noteId, systemId) {
		web.FailCodeMsg(70001, "非法操作！你并非作者本身!")
		return
	}
	// 判断用户是否是作者本身，或者是管理员
	noteLessonVo, _ := noteLessonService.CopyLesson(lessonId, systemId)
	web.Ok(noteLessonVo)
}

// 查看章明细----编辑使用
func (web *NoteLessonController) GetByIdValidator() {

	// 1: 定义一个接受分页信息的上下文
	noteUserRecordsContext := context.NoteUserRecordsContext{}
	// 2: 开始绑定参数
	web.BindJSON(&noteUserRecordsContext)
	// 1: 获取小册idlocal
	// 2: 系统ID
	systemId := web.GetSystemId()
	// 判断用户是否是作者本身，或者是管理员
	noteLesson, _ := noteLessonService.GetById(noteUserRecordsContext.Id.Uint64(), systemId)
	noteLesson.Mdcontent = ""
	// 如果章是收费的，就要开始验证用户是否购买此小册
	if noteLesson.FreeFlag == 1 {
		_, err := noteService.ValidatorUserNoteMain(nil, web.GetUserId(), noteUserRecordsContext.NoteId.Uint64(), systemId)
		if err != nil {
			noteLesson.Htmlcontent = utils.HtmlParseSubstr(noteLesson.Htmlcontent, 1000)
			web.FailCodeMsgData(70001, err.Error(), noteLesson)
			return
		}
	}
	web.Ok(noteLesson)
}

// 查看章明细----编辑使用
func (web *NoteLessonController) GetById() {
	// 1: 获取小册idlocal
	lessonId, _ := web.ParseParamUint64("id")
	noteId, _ := web.ParseParamUint64("noteId")
	// 2: 系统ID
	systemId := web.GetSystemId()
	if !web.CheckPersmission(noteId, systemId) {
		web.FailCodeMsg(70001, "非法操作！你并非作者本身!")
		return
	}
	// 判断用户是否是作者本身，或者是管理员
	noteLesson, _ := noteLessonService.GetById(lessonId, systemId)
	web.Ok(noteLesson)
}

// 删除章
func (web *NoteLessonController) RemoveByID() {
	// 1: 定义一个接受分页信息的上下文
	noteLessonRemoveContext := context.NoteLessonRemoveContext{}
	// 2: 开始绑定参数
	web.BindJSON(&noteLessonRemoveContext)
	noteLessonRemoveContext.SystemId = web.GetSystemId()
	noteId, _ := strconv.ParseUint(noteLessonRemoveContext.NoteId, 10, 64)
	if !web.CheckPersmission(noteId, web.GetSystemId()) {
		web.FailCodeMsg(70001, "非法操作！你并非作者本身!")
		return
	}
	// 3：保存
	noteLessonService.RemoveByID(noteLessonRemoveContext)
	// 4: 返回
	web.Ok("success")
}

// 状态控制章
func (web *NoteLessonController) UpdateStatus() {
	// 1: 定义一个接受分页信息的上下文
	noteLessonStatusContext := context.NoteLessonStatusContext{}
	// 2: 开始绑定参数
	web.BindJSON(&noteLessonStatusContext)
	noteId, _ := strconv.ParseUint(noteLessonStatusContext.NoteId, 10, 64)
	if !web.CheckPersmission(noteId, web.GetSystemId()) {
		web.FailCodeMsg(70001, "非法操作！你并非作者本身!")
		return
	}
	// 3：保存
	noteLessonService.UpdateById(noteLessonStatusContext)
	// 4: 返回
	web.Ok("success")
}

// 保存修改章
func (web *NoteLessonController) SaveLesson() {
	// 1: 定义一个接受分页信息的上下文
	noteLessonContext := context.NoteLessonContext{}
	// 2: 开始绑定参数
	web.BindJSON(&noteLessonContext)
	noteLessonContext.SystemId = web.GetSystemId()
	noteLessonContext.SystemName = web.GetSystemName()
	noteId, _ := strconv.ParseUint(noteLessonContext.NoteId, 10, 64)
	if !web.CheckPersmission(noteId, noteLessonContext.SystemId) {
		web.FailCodeMsg(70001, "非法操作！你并非作者本身!")
		return
	}
	// 3：保存
	vo, _ := noteLessonService.SaveLesson(noteLessonContext)
	// 4: 返回
	web.Ok(vo)
}

// 状态控制章
func (web *NoteLessonController) UpdateContent() {
	// 1: 定义一个接受分页信息的上下文
	noteLessonContentContext := context.NoteLessonContentContext{}
	// 2: 开始绑定参数
	web.BindJSON(&noteLessonContentContext)
	noteId, _ := strconv.ParseUint(noteLessonContentContext.NoteId, 10, 64)
	noteLessonContentContext.SystemId = web.GetSystemId()
	if !web.CheckPersmission(noteId, noteLessonContentContext.SystemId) {
		web.FailCodeMsg(70001, "非法操作！你并非作者本身!")
		return
	}

	if len(noteLessonContentContext.Mdcontent) == 0 {
		web.FailCodeMsg(70001, "请输入内容")
		return
	}

	// 3：保存
	noteLessonService.UpdateByIdContent(noteLessonContentContext)
	// 4: 返回
	web.Ok("success")
}

func (web *NoteLessonController) CheckPersmission(noteId uint64, systemId uint64) bool {
	// 判断用户是否是作者本身，或者是管理员
	noteDetailVo, _ := noteService.GetNoteByIDToPay(noteId, systemId)
	// 2: 用户id从哪里获取
	userId := web.GetUserId()
	userVo := userService.GetUserById(userId, systemId)
	return userVo.Role == "admin" || userVo.TeacherFlag == 1 || noteDetailVo.Userid == userId
}
